/**************************************************************************//**
 * @item     CosyOS-III Config
 * @file     mcucfg_cmx.h
 * @brief    CMSIS Cortex-M Core Config File
 * @author   迟凯峰
 * @version  V1.2.4
 * @date     2025.05.01
 ******************************************************************************/

#ifndef __MCUCFG_CMX_H
#define __MCUCFG_CMX_H

///////////////////////////////////////////////////////////////////////////////

          //*** <<< Use Configuration Wizard in Context Menu >>> ***//

///////////////////////////////////////////////////////////////////////////////
// <o> 系统中断配置
// <3=> SysTick_Handler + PendSV_Handler <0=> TIMn_IRQHandler + XXXx_IRQHandler

// <i> SysTick_Handler + PendSV_Handler：
// <i> 要求MCU必须有BASEPRI寄存器，同时您不能调用xMaskingPRI和xResumePRI进出全局临界区，也不允许私自使用BASEPRI寄存器。
// <i> 如Cortex-M0/M0+/M23等内核，都没有BASEPRI寄存器，就不能采用此方案。
// <i> 又如虽使用了Cortex-M3/M4/M33/M7等内核，但确想调用xMaskingPRI和xResumePRI来实现不同掩蔽范围的全局临界区保护，也不能采用此方案。
// <i> 采用此方案，用户另需在 mcucfg_cm3.h 中继续配置其它的相关定义项。

// <i> TIMn_IRQHandler + XXXx_IRQHandler：
// <i> 用TIMn替代SysTick，TIMn_IRQHandler替代SysTick_Handler，XXXx_IRQHandler替代PendSV_Handler。
// <i> CosyOS将不会使用PendSV_Handler和BASEPRI寄存器，如果MCU有BASEPRI寄存器，您可调用xMaskingPRI和xResumePRI进出全局临界区。
// <i> TIMn_IRQHandler 与 XXXx_IRQHandler 必须满足如下关系：TIMn_IRQn / 32 == XXXx_IRQn / 32。
// <i> 采用此方案，用户另需在 mcucfg_cm0.h 中继续配置其它的相关定义项。
#define MCUCFG_SYSINT                   3

///////////////////////////////////////////////////////////////////////////////
// <o> 互斥访问方案
// <1=> 互斥访问指令 <2=> 互斥访问机制 <3=> 关闭总中断
// <i> 中断挂起服务装载器-互斥访问方案

// <i> 方案一、互斥访问指令
// <i> 该方案仅适用于Cortex-M3/M4/M7等支持互斥访问指令[LDREX/STREX]的内核，可实现全局不关总中断、零中断延迟。

// <i> 方案二、互斥访问机制
// <i> 该方案适用于所有ARM内核，可实现全局不关总中断、零中断延迟。
// <i> 该方案，需要声明一个全局寄存器变量（通常为r6）专用于互斥访问。
// <i> For Arm Compiler 4/5/6，CosyOS has already defined the register variable r6.
// <i> For GNU Compiler，CosyOS has also already defined the register variable r6.
// <i> For IAR Compiler, please set --lock_regs=r6, use Project > Options > C/C++ Compiler > Extra Options.
// <i> For Other Compiler, CosyOS暂不能提供有效定义全局寄存器变量的方法，建议更换其它选项。

// <i> 方案三、关闭总中断
// <i> 该方案适用于所有ARM内核，并具有极短的、确定的关闭总中断时间（包括再次开启总中断在内，不超过10个指令周期）。
// <i> 该方案，内核关闭总中断仅发生在中断挂起服务装载器中的 “__FIFOPTRINC” 段。
#define MCUCFG_PENDSVFIFO_MUTEX         1

///////////////////////////////////////////////////////////////////////////////
// <o> PendSV_FIFO深度
// <i> 此项参数取决于您在中断中调用的挂起服务_FIFO的总数及中断的频率。
// <i> 对于Cortex-M来说，PendSV_FIFO的最大深度定义为255。
// <i> 可开启PendSV_FIFO监控功能，监控历史上的最大值，再适当增大，以确保其不会溢出。
#define MCUCFG_PENDSVFIFO_DEPTH         32

///////////////////////////////////////////////////////////////////////////////
// <q> 浮点寄存器上下文自动保存
// <i> 是否启用浮点寄存器的上下文自动保存功能？
// <i> 如果存在并且启用了硬件浮点单元，同时在多个任务或中断中都要进行浮点运算，应该开启该选项。
#define MCUCFG_ASPEN_LSPEN              0

///////////////////////////////////////////////////////////////////////////////

                //*** <<< end of configuration section >>> ***//

///////////////////////////////////////////////////////////////////////////////

#if MCUCFG_PENDSVFIFO_DEPTH > 255
#error 中断挂起服务FIFO队列深度值溢出！
#endif

#define MCUCFG_OSZEROINSTALL  0
#define mSysTick_Clear()
#define mUserReg_SAVEc()
#define mUserReg_RESc()



#endif
